<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /* 总结：
             *函数的prototype属性：在定义函数时自动添加的，默认值是一个空的object对象
             *对象的__proto__属性：在创建实例对象时自动添加的，默认值指向同一个object对象
             *程序员可以直接操作显示原型，但不能操作隐式原型
        */

        function Fun(){}
        // 内部语句：this.prototype = {};
        console.log(Fun.prototype);
        // 1.每个函数的function都有一个prototype,即显示原型属性，默认指向一个空的object对象

        var fun = new Fun();
        // 内部语句：this.__proto__ = Fun.prototype
        console.log(fun.__proto__);
        // 2.每个实例对象都有一个__proto__，可称为隐式原型

        console.log(Fun.prototype === fun.__proto__);
        // 3.对象的隐式原型的值与其构造函数的显示原型的值相同!!!!!!
        // true

        // 给原型添加方法
        Fun.prototype.print = function (){
            console.log("我是空的object中的方法");
        };
        // 通过实例调用原型中的方法
        fun.print();
        // 我是空的object中的方法
    </script>
</head>
<body>
    
</body>
</html>